如何编写一个最简单的 udp 版本的 echo server 和 echo client(小白也懂!) 您所在的位置:网站首页 创建新端口 端口名怎么填写 如何编写一个最简单的 udp 版本的 echo server 和 echo client(小白也懂!)

如何编写一个最简单的 udp 版本的 echo server 和 echo client(小白也懂!)

2023-07-04 03:01| 来源: 网络整理| 查看: 265

目录

目的

第一步

编写Server(服务器)

第二步

创建Server的各类参数

第三步

实现具体的Server内容

 第四步

编写Client(客户端)

实现具体的Client内容

总流程

总代码

源码下载

目的

我们编写一个udp 版本的 echo server 和 echo client

实现在自己电脑上通过客户端发送任何消息之后,服务端接送该消息

并不做任何处理原封不动返回该内容

第一步

创建两个java文件,命令为Server和Client

编写Server(服务器)

我们首先得清楚,在网络之中,肯定是服务器先启动,只有服务器先启动了我们的客户端才能给服务器发送指令

所以让我们先进入Server.java文件,开始我们的编写代码

第二步 创建Server的各类参数

首先操作网络,我们需要Java为我们提供的一个名字叫做DatagramSocket的包

然后在创建一个对象,给这个对象实例化的时候,我们需要手动为其配置一个端口

第三步 实现具体的Server内容

 下面是每个代码的具体含义

 第四步 编写Client(客户端) 实现具体的Client内容

首先我们还是,创建一个Socket来操作数据

这里看一下两者的不同

下面是每个代码的具体含义

总流程

让我们再来理一遍总体的流程

1.服务器创建一个DatagramPacket的包,等待客户端的消息传递(没有消息则阻塞)

2.客户端通过对应的端口号,附上自己的ip地址,把消息打包发送给服务器让他处理消息

3.服务器接受消息包,并且对消息进行处理,将处理完成的消息重新打包,以ip地址返回给客户端

4.客户端创建一个新的包,接受到了这个处理完成的数据

总代码

Server

import java.net.DatagramSocket; import java.net.SocketException; public class MyServer { private DatagramSocket socket = null; MyServer(int port) throws SocketException { this.socket = new DatagramSocket(port); } public void start() throws IOException { System.out.println("服务器启动!"); while(true){ DatagramPacket requestPacket = new DatagramPacket(new byte[4096],4096); socket.receive(requestPacket); String request = new String(requestPacket.getData(),0, requestPacket.getLength()); String response = process(request); DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),0,response.length(), requestPacket.getSocketAddress()); socket.send(responsePacket); System.out.printf("[%s:%d] req: %s, resp: %s\n", requestPacket.getAddress().toString(), requestPacket.getPort(), request, response); } } public String process(String request){ return request; } public static void main(String[] args) throws IOException { MyServer myServer = new MyServer(9090); myServer.start(); } }

Client

import java.io.IOException; import java.net.*; import java.util.Scanner; public class MyClient { DatagramSocket socket = null; int server_port; String server_ip; MyClient(String server_ip,int server_port) throws SocketException { this.socket = new DatagramSocket(); this.server_ip = server_ip; this.server_port = server_port; } public void start() throws IOException { Scanner sc = new Scanner(System.in); while(true){ System.out.println("->"); String request = sc.next(); DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),0,request.length(), InetAddress.getByName(server_ip),server_port); socket.send(requestPacket); DatagramPacket responsePacket = new DatagramPacket(new byte[4096],4096); socket.receive(responsePacket); String response = new String(responsePacket.getData(),0,responsePacket.getLength()); System.out.printf("req: %s, resp: %s\n", request, response); } } public static void main(String[] args) throws IOException { MyClient myClient = new MyClient("127.0.0.1",9090); myClient.start(); } } 源码下载

https://download.csdn.net/download/qq_62718027/87945837



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有